//对象的rest参数
// let { a, b, ...rest } = {
//     a: 2,
//     b: 3,
//     c: 1,
//     d: 4
// }
// console.log(rest)

//扩展运算符,将函数里面的形参组合为一个数组
// function sum(...arg) {
//     console.log(arg)
// }
// sum(1, 2)

// function add(x, y) {
//     let a = x + y
//     console.log(a)
// }
// add(...[3, 4])
// add(...{0:4,1:5,length:2})

//数组遍历方法举例
// let arr = [1, 2, 3, 4, 5]
// let flag = arr.some(function (value) {
//     console.log(value)
//     //当此条件满足，则退出遍历
//     return value >= 7
// })
//只要有一个值满足，flag则为true,都不满足才为false
// console.log(flag)

//every也是可以遍历数组，只有每一个都满足条件的时候才为true

//reduce的使用
// let sum2 = arr.reduce(function (prev, curr, index, array) {
//     console.log(prev, curr, index, array)
//     return prev + curr
// }, 0)
//输出结果：null,1,0,arr
// 1,2,1,arr
// 1,3,2,arr
// console.log(sum2)

//箭头函数
// var x = function (x1, x2) {
//     let x = x1 + x2
//     return x
// }
// var y = (y1, y2) => {
//     let y = y1 + y2
//     return y
// }

//深拷贝
let e = 7
let f = e
e = 9



//请运用今天所学的知识，编程实现数组和对象的深拷贝
//如果是浅拷贝：复制的是地址；如果是深拷贝，复制的是值
//考虑两种：数组或者对象，其他都是为基本数据类型，不考虑函数

//1.数组的深度拷贝
let deepClone = data => {
    let result = []
    data.forEach((value, i) => {
        if(typeof(value) === 'object'){
            result[i] = deepClone(value)
        }
        else 
            result[i] = value
    })
    return result
}

//浅拷贝
let arr2 = [1, 23, 4, [1, 2, 3]]
let arr3 = deepClone(arr2)
arr2[3][1] = 5
console.log(arr3[3][1])
// let obj1 = { a: [4, 5], b: 3 }
// let obj2 = obj1
// obj1.a[1] = 9
// console.log(obj2)

//改写上面的方法，如果是对象和数组两种结构都可能有，这个时候如何来实现它们的深拷贝





